/*
 * @Author: 大D
 * @email: 857216393@qq.com
 * @Date: 2024-01-16 20:23:26
 * @Description:工具方法
 */
// 获取assets静态资源
export const getAssetsFile = (url: string) => {
  return new URL(`../assets/images/${url}`, import.meta.url).href;
};
/**
 * @description: url拼接IP地址
 * @param {string} url
 * @return {*} url
 */
export const joinUplodUrl = (url: string): string => {
  return import.meta.env.VITE_VUE_UPLOAD_URL + url;
};
/**
 * @description: 数组转树结构  递归效率低 所以通过map的形式
 * @param {*} arr 原始数组
 * @param {*} root 根节点
 * @param {*} pid
 * @return {*} array
 */
export const arrToTree = (
  arr: any[],
  root: number | string,
  id = 'id',
  pid: any = 'pid'
): any[] | undefined => {
  if (!Array.isArray(arr)) return;
  const arrTree = [];

  const map: any = {};
  for (const item of arr) {
    map[item[id]] = item; //利用对象的引用地址不变 同步修改
  }

  for (const item of arr) {
    const itemPid = item[pid];
    if (itemPid === root) arrTree.push(item);
    else {
      // 这一层就相当于递归了
      map[itemPid]?.children ? map[itemPid].children.push(item) : (map[itemPid].children = [item]);
    }
  }
  return arrTree;
};

/**
 * @description: 随机颜色 随机透明度
 * @param {number} alpha 透明度
 * @param {*} min
 * @param {*} max
 * @return {*} rgba色值
 */
export const rgba = (alpha: number, min = 0, max = 256) => {
  //rgb颜色随机
  let r = Math.floor(Math.random() * (max - min)) + min;
  let g = Math.floor(Math.random() * (max - min)) + min;
  let b = Math.floor(Math.random() * (max - min)) + min;
  alpha = alpha ? alpha : Math.random(); //随机生成1以内a值
  return `rgba(${r},${g},${b},${alpha})`;
};
/**
 * @description: 随机生成16制颜色
 * @param {*} min
 * @param {*} max
 * @return {*}  #000000 16制颜色
 */
export const color16 = (min = 0, max = 256) => {
  //十六进制颜色随机
  let r = Math.floor(Math.random() * (max - min)) + min;
  let g = Math.floor(Math.random() * (max - min)) + min;
  let b = Math.floor(Math.random() * (max - min)) + min;
  return '#' + r.toString(16) + g.toString(16) + b.toString(16);
};

/**
 * @description: 处理ip归属地
 * @return {*}
 */
export const handleCity = (obj: any) => {
  if (!obj.ip_address) return '未知';
  const province = obj.ip_address.province || '';
  const city = obj.ip_address.city || '';
  return province + city;
};
